import numeral from 'numeral'
import moment from 'moment'

/**
 * 判断数据类型
 * @param {*} con 要判断的 值
 * @param {String} type
 * @returns {boolean}
 */
export function isType (con, type) {
    return Object.prototype.toString.call(con) === `[object ${type}]`
}

/**
 * 数字格式化
 */
export function numerals (number, format = '0,0.00') {
    return numeral(number).format(format)
}

/**
 * 时间格式化
 */
export function moments (date, format = 'YYYY-MM-DD hh:mm:ss') {
    return moment(date).format(format)
}

/**
 * 对象转 地址参数
 * @param {Object} data
 */
export function objToUrlStr (data) {
    let newObj = {}
    // 过滤没用属性
    for (let key in data) {
        data[key] && (newObj[key] = data[key])
    }

    if (Object.keys(newObj).length === 0) return ''

    return Object.keys(newObj).map((key) => {
        return `${encodeURIComponent(key)}=${encodeURIComponent(newObj[key])}`
    }).join('&')
}

/**
 * 正则验证
 */
export let regular = {
    'mobile' (str) { // 手机号码
        return /^[1][3,4,5,6,7,8,9][0-9]{9}$/.test(str);
    },
}

/**
 * 是否登录
 */


/**
 * 节流函数
 * @param {Function} fn 回调
 * @param {Number} delay 时间
 */
export function throttle (fn, delay=500) {
    let __ = fn, // 储存回调
        frist = true, // 是否是第一次
        timer = null

    return function () {
        let args = arguments
        // 如果第一次调用 不做限制
        if (frist) {
            __.apply(this, args) // 注意当前的
            frist = false
        }

        // 如果定时器存在，说明还没到可以执行的时间
        if (timer) return

        // 如果到了规定的时间 重置第一次
        timer = setTimeout(() => {
            clearTimeout(timer)
            timer = null
            // 重置第一次
            frist = true
        }, delay)
    }
}

/**
 * 防抖
 * @param {Function} fn 回调
 * @param {Number} delay 时间
 */
export function debounce (fn, delay=500) {
    let __ = fn,
        timer = null

    // 如果还没到时间 清除定时器 并重新定时
    return function () {
        clearTimeout(timer)
        let args = arguments
        timer = setTimeout(() => {
            __.apply(this, args)
        }, delay)
    }
}

// /**
//  * 表单验证
//  * @param {Object}
//  */
// export function validate (value, rule) {
//
// }
